package com.hd.core.project.module.service;

import com.hd.core.project.module.constants.ModuleConstants;
import com.hd.core.project.module.domain.Classes;
import com.hd.core.project.module.domain.Select2;
import com.hd.core.project.module.mapper.ClassesMapper;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import com.baomidou.mybatisplus.service.impl.ServiceImpl;
import org.springframework.transaction.annotation.Transactional;

import java.util.List;
import java.util.Map;

/**
 * 班级-服务层
 * 
 * <br/>
 * @since JDK 1.8
 * @version  V1.0
 * @author RichardTang 
 * @date: 2018年8月20日
 * @package com.hd.core.project.module.service
 * @copyright:Copyright (c) 2018, 1245811923@qq.com All Rights Reserved.
 */
@Service
@Transactional
public class ClassesService extends ServiceImpl<ClassesMapper,Classes> {

    @Autowired
    private ModuleUserService moduleUserService;

    /**
     * 添加一个班级 并且设置相对于的教师的状态
     * @param entity
     */
    public boolean insert(Classes entity) {
    	Integer result = 0;
        moduleUserService.updateMasterTeacherFlagById('Y',entity.getMasterTeacherId());
        result += baseMapper.insert(entity);
        return result > 0;
    }

    /**
     * 检查该班级名称是否以及存在
     * @param className 班级名称
     */
    public String checkName(String className) {
        int uniqueResult = baseMapper.checkName(className);
        return uniqueResult == 0 ? ModuleConstants.UNIQUE : ModuleConstants.NOT_UNIQUE;
    }

    /**
     * 批量删除班级列表并更新相对于的教师
     * 
     * @param idsStr id集合
     */
    public int deleteClassesById(List<String> ids) {
        int result = 0;
        List<Long> masterTeachersId = baseMapper.selectTeacherIdById(ids);
        result = moduleUserService.updateMasterTeachersFlagById('N',masterTeachersId);
        result += baseMapper.deleteBatchIds(ids);
        return result;
    }

    /**
     * 班级学生人数 + 1
     * 
     * @param classId 现在班级对应的id值
     */
	public int increasePeopleNumber(String classId) {
		return increasePeopleNumber(classId,1);
	}
	
	/**
     * 班级学生人数 + N
     * 
     * @param classId 现在班级对应的id值
     * @param 累加的数量
     */
	public int increasePeopleNumber(String classId,Integer number) {
		return baseMapper.increasePeopleNumber(classId,number);
	}

	/**
	 * 减少学生人数
	 * 
	 * @param idMap key为对应班级id value为减少的人数
	 */
	public void decreasePeopelNumber(Map<String,Long> idMap) {
		baseMapper.decreasePeopelNumber(idMap);
	}

	/**
	 * 查询班级并且返回为Select2格式
	 * 
	 * @return 以select2格式展示的教师数据
	 */
	public List<Select2> selectListFmtSelect2() {
		return baseMapper.selectListFmtSelect2();
	}
	
	/**
	 * 根据教师id查询班级信息
	 * 
	 * @param teacherId 教师id
	 * @return 对应数据的教师
	 */
	public Classes selectClassByTeacherId(Long teacherId) {
		Classes classInfo = null;
		if(teacherId != null && teacherId > 0) {
			classInfo = new Classes();
			classInfo.setMasterTeacherId(teacherId);
			classInfo = baseMapper.selectOne(classInfo);
		}
		return classInfo;
	}
}
